const fs = require('fs')

/**
 * 1: 打开 a 文件, 利用 read 将数据保存到 buffer 暂存起来
 * 2: 打开 b 文件, 利用 write 将 buffer 中数据写入到 b 文件中
 */

let buf = Buffer.alloc(10)

// // 1: 打开指定的文件
// fs.open('a.txt', 'r', (err, rfd) => {
//   // 3: 打开 b 文件, 执行写操作
//   fs.open('b.txt', 'w', (err, wfd) => {
//     // 2: 从打开的文件中读取
//     fs.read(rfd, buf, 0, 10, 0, (err, readBytes) => {
//       // 4: 将 buffer 中的数据写入到 b 文件
//       fs.write(wfd, buf, 0, 10, 0, (err, written) => {
//         console.info('写入成功!')
//       })
//     })
//   })
// })

// 数据的完全拷贝
// fs.open('a.txt', 'r', (err, rfd) => {
//   fs.open('b.txt', 'a+', (err, wfd) => {
//     fs.read(rfd, buf, 0, 10, 0, (err, readBytes) => {
//       fs.write(wfd, buf, 0, 10, 0, (err, written) => {
//         fs.read(rfd, buf, 0, 5, 10, (err, readBytes) => {
//           fs.write(wfd, buf, 0, 5, 10, (err, written) => {
//             console.info('写入成功!')
//           })
//         })
//       })
//     })
//   })
// })

const BUFFER_SIZE = buf.length
let readOffset = 0

fs.open('a.txt', 'r', (err, rfd) => {
  // a+: 追加的方式
  fs.open('b.txt', 'a+', (err, wfd) => {
    function next() {
      fs.read(rfd, buf, 0, BUFFER_SIZE, readOffset, (err, readBytes) => {
        if (!readBytes) {
          // 没有读取内容,内容读取完毕
          fs.close(rfd, () => {})
          fs.close(wfd, () => {})
          console.info('拷贝完成!')
          return
        }
        // 下次开始读取的位置
        readOffset += readBytes
        fs.write(wfd, buf, 0, readBytes, (err, written) => {
          next() // 继续读取
        })
      })
    }
    next() // 首次调用
  })
})
